home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / d86v223.arc / MEMORY.DOC < prev    next >
Text File  |  1987-04-08  |  17KB  |  363 lines

  1. ---MEMORY.DOC---
  2.  
  3. Memory Display Windows
  4.  
  5. The debugger allows you to set up windows into your program 
  6. memory space. Using these windows, you can view memory in a 
  7. variety of formats.  The windows will remain in effect until you 
  8. cancel them; updating themselves automatically if the memory 
  9. changes. 
  10.  
  11. A memory window line consists of a specification, typed in by 
  12. you, followed by a display, supplied by the debugger. 
  13.  
  14. To type in a specification on any one of window lines 1 through 
  15. 6, simply type the associated digit, 1 through 6, when the 
  16. debugger is in its main command-mode.  The cursor will jump to 
  17. the beginning of the memory-window line you are specifying.  You 
  18. then type in a display-format specification, followed by the 
  19. address of memory you want displayed. 
  20.  
  21. The simplest form of the display-format specification is a single 
  22. letter, signifying one of the display types available.  The 
  23. choices are: 
  24.  
  25.        B  for hexadecimal bytes
  26.        W  for hexadecimal words
  27.        N  for decimal bytes
  28.        D  for decimal words
  29.        Q  for octal bytes
  30.        O  for octal words
  31.        T  for text; each byte reduced to one ASCII display-
  32.              character 
  33.        A  for ASCII text, each byte occupying 2 display-
  34.              characters 
  35.        C  for ASCII characters, occupying 2 bytes if needed, 
  36.              otherwise one 
  37.  
  38. A format-specification of one of the above letters will cause the 
  39. debugger to display the array of bytes starting at the address 
  40. you specify, in the format indicated by the letter, as long as 
  41. there is room on the line. All letters in a format-specification 
  42. (or in any other context in the debugger) can be typed in either 
  43. upper- or lower-case. 
  44.  
  45. The format-specification should be terminated by a comma.  After 
  46. the comma (and an optional space), you type the address of memory 
  47. you want displayed. This consists of two values, the segment 
  48. followed by the offset.  The values should be separated by a 
  49. comma. You can omit the segment value if you wish: in that case, 
  50. the current value of DS is used. The debugger reminds you that 
  51. you have specified this option by following what you type with 2 
  52. commas instead of one. 
  53.  
  54. The value you type can take one of the following forms:
  55.    a. a numeric constant, whose format is just as in the assembly 
  56.       language (leading zero means default hex, otherwise default 
  57.       decimal) 
  58.    b. a register name (IP is now accepted as a register name) 
  59.    c. a user-symbol from the assembly-language program being 
  60.       debugged. 
  61.  
  62. After you type the address-specification, you hit the ENTER key, 
  63. and the debugger fills out the rest of the line with the memory 
  64. display. 
  65.  
  66. For example, if you want to display hex bytes starting at 01000 
  67. hex on display-line 2, you type 2b,01000<ENTER>. The cursor jumps 
  68. to the line immediately when you type the 2, and it displays the 
  69. b,01000 on the line as you type it.  The b says you want hex 
  70. bytes, and the 01000 has a leading zero to signify a hexadecimal 
  71. address, not decimal.  When you press the ENTER key, the debugger 
  72. displays two commas, followed by the hex bytes.  If the memory is 
  73. zeroed, you will see 00 00 00 00 00 etc. to the end of the 
  74. display-line. 
  75.  
  76.  
  77. Erasing Memory Display Lines
  78.  
  79. Any memory-display window that you specify will remain in effect, 
  80. always updated to show the latest memory contents, until you 
  81. explicitly erase it. To erase a window, you type the number of 
  82. the window, followed by either a blank or the ENTER key.  The 
  83. line will also be erased if you start typing a format-
  84. specification, and you hit the ENTER key before you get to your 
  85. address-specification. 
  86.  
  87. In the coming sections, many of the examples assume (and they say 
  88. so) that your display is blank before you type in the example.  
  89. You can always get a blank display by typing in each number 
  90. followed by a blank: "1 2 3 4 5 6 ". 
  91.  
  92.  
  93. Continuation Lines
  94.  
  95. You may continue a memory-display window onto the next line, by 
  96. placing a double-quote mark " at the beginning of the next line.  
  97. You may do this in one of two ways: you may type the number of 
  98. the next line, followed by the double-quote mark; or you may 
  99. simply type the double-quote mark at the command level.  The 
  100. first method allows you to specify which window-line you want 
  101. continued, if there is more than one.  The second method is more 
  102. convenient to use.  It places the quote-mark on the last blank-
  103. line that immediately follows a non-blank line. 
  104.  
  105. You may continue placing "-marks on as many lines as you have, 
  106. creating a multi-line display. 
  107.  
  108. The debugger follows the "-mark with the address of memory being 
  109. displayed, followed by the memory, according to the start of the 
  110. type-specification of the line being continued.  The memory 
  111. display is aligned with the display of above line. 
  112.  
  113. If you are creating a multi-line display, and your specification 
  114. is a long one, you may wish to start the display at the beginning 
  115. of the next line, rather than after the specification on the 
  116. first line.  This will often give you more room.  You do this by 
  117. terminating the format-specification with a slash / instead of a 
  118. comma.  For example, to display many hex bytes at the array 
  119. BYTE_ARRAY, type 1b/byte_array<ENTER>""""" when the memory-
  120. display is empty. 
  121.  
  122.  
  123. Mixed Format Specification
  124.  
  125. Instead of having all your bytes or words on a line displayed in 
  126. the same format, you can mix your formats.  You do this by 
  127. providing more than one letter in your format-specification.  The 
  128. debugger will display one memory unit for each letter-type you 
  129. specify.  The line will be filled out with the last type given.  
  130. For example, if you type 3nwb,01000<ENTER>, you will get a 
  131. display on memory-line 3 of the decimal byte at 01000, the hex 
  132. word at 01001, and an array of hex bytes starting at 01003. 
  133.  
  134.  
  135. Numbers in a Format Specification
  136.  
  137. You may precede any letter in a format specification with a 
  138. number up to 255. The effect is the same as if you had repeated 
  139. the letter the given number of times.  For example, if you type 1 
  140. to go to memory line 1, followed by 4w10tb,02000<ENTER>, you will 
  141. get 4 hex words at 02000, 10 text characters at 02008, and an 
  142. array of hex bytes from 02012 filling out the rest of the line. 
  143.  
  144. You may also end your format specification with a number up to 
  145. 255.  This will cause the entire specification to be repeated the 
  146. given number of times. If there is room on the line for the full 
  147. number given, the display will stop there-- there will be no 
  148. repeating of the last type-byte.  If there is not room on the 
  149. line for the full number of global iterations, the debugger will 
  150. stop at the end of the last iteration that would fit.  For 
  151. example, the specification b8 causes 8 hex bytes to be displayed, 
  152. and the remainder of the display line to be blank.  The 
  153. specification b3w9 will cause the debugger to try to output 9 
  154. records, each consisting of a hex byte followed by 3 hex words.  
  155. After putting out 2 such records, the debugger will see that 
  156. there is not room for a third full record, so it will stop.  This 
  157. stopping at the record-boundary allows you to continue the 
  158. display, with correct alignment, on subsequent lines. 
  159.  
  160.  
  161. Spacing Between Memory-Display Units
  162.  
  163. In general, the debugger provides a space between each unit (byte 
  164. or word) it displays.  There is an exception, however: the 
  165. debugger will not space between adjacent text-characters (A,C, or 
  166. T specifications). 
  167.  
  168. There are special specifiers G, J, and M, described in the 
  169. section below, that allow you to override the debugger's spacing 
  170. policies. 
  171.  
  172.  
  173. Special-Action Format Specifiers
  174.  
  175. In addition to the nine letters mentioned above, that specify 
  176. data types, there are 7 other letters, and 2 other characters, 
  177. that cause the debugger to perform special actions.  Following is 
  178. a complete description all 18 non-digit characters that can occur 
  179. within a format specification: 
  180.  
  181. =  causes a display, using the format of the letter following =, 
  182.    of the current memory pointer value, instead of the contents 
  183.    of the memory location.  If a letter does not follow the =, 
  184.    then W is used; i.e., the pointer is display as a 4-digit hex 
  185.    word.  There are two uses for this feature that come to mind: 
  186.  
  187.    * If your address specification is symbolic, you can display 
  188.      the equivalent numeric address with =w, telling you exactly 
  189.      where the symbol is in memory.  Note that this display 
  190.      implicitly occurs at the beginning of continuation lines.  
  191.      If the format-specification begins with =, then the implicit 
  192.      display is suppressed, because the same address is given 
  193.      explicitly by the L. 
  194.  
  195.    * You can display the values of registers in a format other 
  196.      than hex.  For example, in the 8086 debugger you can display 
  197.      AX as a decimal number by specifying =d1,ax on one of the 
  198.      memory-display lines. 
  199.  
  200. @  causes the debugger to read the next byte it was going to 
  201.    display, and instead of displaying the byte, use it as a 
  202.    count, to repeat the next letter in the specification.  The 
  203.    debugger uses only the bottom 7 bits of the memory byte for 
  204.    the count.  For example, of the memory contains a length byte 
  205.    followed by that number of text characters, the text could be 
  206.    displayed by specifying @t (or @a or @c, depending on what you 
  207.    want the display to look like).  If the memory contains 05 41 
  208.    42 43 44 45, the @t would cause ABCDE to be displayed. 
  209.  
  210. A  causes a display of a single ASCII byte, always using 2 
  211.    display bytes. The following table shows what is displayed for 
  212.    unusual bytes: 
  213.  
  214.     range of N         display of N               Example
  215.     ----------         ------------               -------
  216.      00--1F            ^ followed by N+040         02 is ^B
  217.      22                ""
  218.      23                "#
  219.      24                "$
  220.      5E                "^
  221.      7F                ^r  (r stands for rubout)
  222.      80--9F            $ followed by N-080+040     081 is $A
  223.      A0--FE            # followed by N-080         0B1 is #1
  224.      FF                $r
  225.  
  226.    All other bytes cause a display of a space following by the 
  227.    appropriate ASCII byte.  The A specification is used when you 
  228.    need guaranteed display length for proper alignment of 
  229.    continuation lines; and you do not want the potential loss of 
  230.    information provided by the single-byte T specification. 
  231.  
  232. B  causes a display of a single byte as a 2-digit hexadecimal 
  233.    number.  Numbers less than hex 10 have a leading 0, so that 
  234.    the display is always 2 digits. 
  235.  
  236. C  causes a display of a single ASCII character, just as the A 
  237.    specification, except that normal characters (not in the 
  238.    table) display as just one byte, without the preceding space. 
  239.  
  240. D  causes the display of a 16-bit word as an unsigned positive 
  241.    decimal number. There will be no leading zeros in the display; 
  242.    so the length of the display depends on the size of the 
  243.    number. 
  244.  
  245. G  causes a gap between the adjacent display-formats, of one 
  246.    space more than there would have been without the G.  For 
  247.    adjacent string bytes, this means a space where there would 
  248.    have been none.  For other data types, this means two spaces 
  249.    where there would have been one. 
  250.  
  251. J  (join) causes two adjacent data types, that would have had a 
  252.    space between them, to have no space. 
  253.  
  254. L  (line) causes the display of an entire text line, using the C-
  255.    format for each character of the line.  The debugger does not 
  256.    display the terminating carriage return; nor does it display 
  257.    the following linefeed if there is one.  (If you want it to, 
  258.    specify LRC or LRRCC instead of L.) If a carriage return is 
  259.    not found and the display line fills, then the L-specifier is 
  260.    cut off in mid-string.  Any continuation line would start up 
  261.    at the beginning of the format specification, at the mid-
  262.    string place in memory. 
  263.  
  264. M  (mark) causes a vertical-bars output to be made.  The output 
  265.    will replace a separating space that would have been output in 
  266.    the position.  If you want the space, you can provide G on 
  267.    either side (or both sides) of the M. 
  268.  
  269. N  (number) causes the display of an 8-bit byte as an unsigned 
  270.    positive decimal number.  There will be no leading zeroes in 
  271.    the display; so the length of the display depends on the size 
  272.    of the number. 
  273.  
  274. O  causes a display of a 16-bit word as a 6-digit octal number.  
  275.    Numbers less than octal 100000 have one or more leading 
  276.    zeroes, so that the display is always 6 digits. 
  277.  
  278. Q  causes a display of a single byte as a 3-digit octal number.  
  279.    Numbers less than octal 100 have one or more leading zeroes, 
  280.    so that the display is always 3 digits. 
  281.  
  282. S  causes the display of an entire null-terminated string, using 
  283.    the C-format for each character of the string.  The 
  284.    terminating null (hex 00) does not generate a display (if you 
  285.    want it to, specify SRC instead of S).  If a null is not found 
  286.    and the display line fills, then the S-specifier is cut off in 
  287.    mid-string.  Any continuation line would start up at the 
  288.    beginning of the format specification, at the mid-string place 
  289.    in memory. 
  290.  
  291. T  causes the display of a single ASCII text byte, with a 
  292.    guaranteed display-space of one character.  The character 
  293.    displayed is the same as the second character of the A-format.  
  294.    This means that you will not be able to tell the difference 
  295.    between normal, displaying ASCII characters, and their control 
  296.    and non-ASCII counterparts.  You gain a compact 
  297.    representation, but you also gain ambiguity. 
  298.  
  299. U  (unskip) causes the memory display pointer to decrement by one 
  300.    byte.   No display is generated by this command.  This command 
  301.    is useful in several contexts: 
  302.  
  303.    * displaying memory in more than one format.  For example, the 
  304.      specification 8b8r2g8a gives a hex-and-ASCII side-by-side 
  305.      display, similar to that provided by many memory-dump 
  306.      programs. 
  307.  
  308.    * displaying memory out of its sequence order.  To test your 
  309.      understanding of the special-action letters in a format 
  310.      specification, you should convince yourself that the 
  311.      specification xb2rjbx99/ gives the same display on the 
  312.      following "-continuation line as the specification w/ does. 
  313.  
  314.    * displaying the count-byte consumed by the @ character.  For 
  315.      example, instead of @t, you could specify nr@t, which would 
  316.      display the string count as well as the string.  If memory 
  317.      were 05 41 42 43 44 45, this would be 5 ABCDE. 
  318.  
  319. W  causes a display of a 16-bit word as a 4-digit hex number.  
  320.    Numbers less than hex 1000 have one or more leading zeroes, so 
  321.    that the display is always 4 digits. 
  322.  
  323. X  causes the debugger to skip over the memory byte currently 
  324.    pointed to, without displaying it.  The memory pointer is thus 
  325.    incremented. 
  326.  
  327. Z  is given immediately following another format letter.  It 
  328.    causes the display to fill out the line with displays of the 
  329.    given preceding format; but instead of starting with the given 
  330.    address, the debugger starts with a lower address, and 
  331.    displays memory up to but not including the given address. 
  332.  
  333.    The most common usage of Z is to display the memory just 
  334.    output by a moving output pointer.  For example, in the 8086 
  335.    debugger, you could specify bz,es,di to display the hex bytes 
  336.    most recently output by the STOSB instruction. 
  337.  
  338.    Note that Z makes sense only in a limited number of contexts.  
  339.    You will almost certainly want to use Z only as the second 
  340.    letter of a two-letter specification, as in the example above.  
  341.    We further recommend that a format-letter that generates a 
  342.    fixed-length display be used; i.e., B,W,Q,O,T, or C.  If you 
  343.    use a variable-length display (N,D, or A), the debugger will 
  344.    be as pessimistic as possible about the number of display 
  345.    characters needed, so that the display will likely terminate 
  346.    before the end of the line. 
  347.  
  348.    A continuation of a Z-line will produce the same output as the 
  349.    original line.  If you want to continue beyond the address 
  350.    given, repeat the specification without the Z. 
  351.  
  352.    We now discuss what happens if you use Z in other contexts.  
  353.    Unless your taste runs to the bizarre, you should skip this 
  354.    paragraph.  Since Z fills out a line, there should be no 
  355.    specifiers after Z: they would be ignored.  Also note that Z 
  356.    has an effect only on the single letter that precedes it.  If 
  357.    you precede Z with more than one letter, you will get a 
  358.    confusing effect: the display would start out forward from the 
  359.    address, then it would retreat when it got to Z's preceding 
  360.    letter.  The Z-array would run up to the address reached 
  361.    before, which is forward from the address you specified. 
  362.  
  363.